# 引用数据类型拷贝
对于引用数据类型的话,细分可以分为下面三个方面
- 赋值
- 浅拷贝
- 深拷贝
# 赋值
引用类型的赋值是传址。只是改变指针的指向,例如,引用类型的赋值是对象保存在栈中的地址的赋值,这样的话两个变量就指向同一个对象,因此两者之间操作互相有影响。例如:
var a = {}; // a保存了一个空对象的实例
var b = a; // a和b都指向了这个空对象
a.name = 'jozo';
console.log(a.name); // 'jozo'
console.log(b.name); // 'jozo'
b.age = 22;
console.log(b.age);// 22
console.log(a.age);// 22
console.log(a == b);// true
@前端进阶之旅: 代码已经复制到剪贴板

这样子的情况,会导致a和b指向同一份数据,对其中一个进行修改数据的话,会影响到另外一个,实际开发中,这不是我们预期中的结果,这会照成某种程度上的bug。
那么我们如何不让相互之间产生影响呢?一种简单的办法就是拷贝一份a变量的数据,所以根据拷贝的层次不同可以分为浅拷贝和深拷贝,浅拷贝的话知识进行一层拷贝,深拷贝的话是无限层次的拷贝!
我们先来实现一个浅拷贝
let shallowClone = source => {
let target = {}
for(let i in source) {
if( source.hasOwnProperty(i) )
target[i] = source[i];
}
return target
}
let demo = {
b:{
c : {
}
}
}
let demo2 = shallowClone(demo)
let demo3 = demo;
console.log(demo3 === demo ) // true
console.log(demo2.b.c === demo.b.c ) // true
console.log(demo2.b === demo.b ) // true
console.log(demo2 === demo ) // false
@前端进阶之旅: 代码已经
